//
//  Problem2231.swift
//  LeetCode
//
//  Created by 武侠 on 2023/6/29.
//  Copyright © 2023 zhulongiMac02. All rights reserved.
//

import UIKit

/*
 2231. 按奇偶性交换后的最大数字 简单
 
 给你一个正整数 num 。你可以交换 num 中 奇偶性 相同的任意两位数字（即，都是奇数或者偶数）。
 返回交换 任意 次之后 num 的 最大 可能值。

 示例 1：
     输入：num = 1234
     输出：3412
     解释：交换数字 3 和数字 1 ，结果得到 3214 。
     交换数字 2 和数字 4 ，结果得到 3412 。
     注意，可能存在其他交换序列，但是可以证明 3412 是最大可能值。
     注意，不能交换数字 4 和数字 1 ，因为它们奇偶性不同。
 示例 2：

 输入：num = 65875
 输出：87655
 解释：交换数字 8 和数字 6 ，结果得到 85675 。
 交换数字 5 和数字 7 ，结果得到 87655 。
 注意，可能存在其他交换序列，但是可以证明 87655 是最大可能值。
  

 提示
 1 <= num <= 109
 */
class Problem2231: NSObject {
    /*
     思路
     1: 创建2个数组num1和num2，分别存储奇数和偶数，
     2: 然后：分别排序
     3: 合并到一块
     */
    func largestInteger(_ num: Int) -> Int {
        var num1:[Int] = []
        var num2:[Int] = []
        
        var num = num
        var seg = 1
        var i = 0
        while num >= seg {
            if i == 0 {
                num2.append((num / seg) % 10)
                i = 1
            } else {
                num1.append((num / seg) % 10)
                i = 0
            }
            seg *= 10
        }
        
        num1 = num1.sorted(by: >)
        num2 = num2.sorted(by: >)
        
        print(num1)
        print(num2)
        
        num = 0
        if num2.count > num1.count {
            for i in 0..<num1.count {
                num = (num * 10 + num2[i]) * 10 + num1[i]
            }
            num = num * 10 + num2.last!
        } else {
            for i in 0..<num1.count {
                num = (num * 10 + num1[i]) * 10 + num2[i]
            }
        }
        
        return num
    }
}
